home *** CD-ROM | disk | FTP | other *** search
/ Softdisk Supreme / Softdisk Supreme.iso / pc / DSK Files / 0-49 / SD022b.dsk / GAS MILEAGE.bas < prev    next >
BASIC Source File  |  2003-06-12  |  9KB  |  229 lines

  1. 100  REM  * PROGRAM BY DARREL RAINES  06/27/83 *
  2. 110  LOMEM: 16385:D$ =  CHR$(4)
  3. 120  PRINT D$;"BRUN CONVERT.OBJ"
  4. 130  HOME 
  5. 140  VTAB 12: INPUT "FOR WHICH CAR DO YOU WISH TO MAKE AN    ANALYSIS? ";NM$
  6. 150  IF NM$ = ""  THEN  HOME : GOTO 7000
  7. 160  ONERR  GOTO 800
  8. 170  PRINT D$;"OPEN ";NM$;" MILEAGE.DATA,L6"
  9. 180  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R0"
  10. 190 TF =  USR(DU):IM =  USR(DU)
  11. 200  POKE 216,0
  12. 210  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R";(TF *2 +2)
  13. 220 TG =  USR(DU):TM =  USR(DU):LA =  USR(DU):HA =  USR(DU):EA =  USR(DU)
  14. 230  PRINT D$
  15. 240  HOME 
  16. 250  INVERSE : HTAB 15: PRINT "GAS MILEAGE": NORMAL : PRINT 
  17. 260  PRINT "YOU HAVE ENTERED ";TF;" RECORDS TO DATE.": PRINT : PRINT 
  18. 270  PRINT "WOULD YOU LIKE TO:": PRINT 
  19. 280  PRINT " 1   ENTER DATA": PRINT 
  20. 290  PRINT " 2   EDIT DATA": PRINT 
  21. 300  PRINT " 3   CALCULATE LIFETIME AVERAGE": PRINT 
  22. 310  PRINT " 4   CALCULATE AVERAGE FOR LAST TEN": PRINT 
  23. 320  PRINT " 5   PERFORM NUMERICAL ANALYSIS": PRINT 
  24. 330  PRINT " 6   PERFORM GRAPHICAL ANALYSIS": PRINT 
  25. 340  PRINT " 7   EXIT": PRINT 
  26. 350  VTAB 22: PRINT "PRESS SELECTION NUMBER -- ";: GET SN$:SN =  VAL(SN$): PRINT SN
  27. 360  IF (SN >0)  AND (SN <8)  THEN 400
  28. 370  VTAB 21: INVERSE : PRINT "<CTRL-G>INVALID ENTRY, PLEASE TRY AGAIN...": NORMAL 
  29. 380  CALL  -958
  30. 390  GOTO 350
  31. 400  HOME 
  32. 410  ON SN GOTO 1000,2000,3000,4000,5000,6000,7000
  33. 800  HOME 
  34. 810  PRINT D$;"OPEN ";NM$;" MILEAGE.DATA,L6"
  35. 820  PRINT "YOU HAVE NEVER ENTERED DATA ON THIS CAR": PRINT "BEFORE.  DO YOU WISH TO START A FILE? ";: GET SN$: PRINT SN$: PRINT 
  36. 830  IF SN$ < >"Y"  THEN  HOME : PRINT D$;"DELETE ";NM$;" MILEAGE.DATA": GOTO 7010
  37. 840  INPUT "PLEASE ENTER INITIAL MILEAGE: ";IM: PRINT 
  38. 850  INPUT "WHAT DO YOU CONSIDER TO BE A NORMAL     MILES/GALLON AVERAGE FOR THIS CAR: ";EA
  39. 860 TG = 0:TM = 0:HA =  -1:LA = 5000
  40. 870  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R0"
  41. 880 DU =  USR(0):DU =  USR(IM):DU =  USR(TG):DU =  USR(TM):DU =  USR(LA):DU =  USR(HA):DU =  USR(EA)
  42. 890  PRINT D$;"CLOSE ";NM$;" MILEAGE.DATA"
  43. 900  GOTO 170
  44. 1000  HTAB 16: INVERSE : PRINT "DATA ENTRY": NORMAL 
  45. 1010  VTAB 20: PRINT "MILE.";: HTAB 15: PRINT "GAL.";: HTAB 30: PRINT "AVE."
  46. 1020  PRINT "-----";: HTAB 15: PRINT "----";: HTAB 30: PRINT "----"
  47. 1030  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R";(TF *2 +1)
  48. 1040 LM =  USR(DU)
  49. 1050  PRINT D$
  50. 1060 M = LM:G = 0:A = 0: POKE 34,2: POKE 35,17
  51. 1070  VTAB 22: CALL  -868
  52. 1080  PRINT M;: HTAB 15: PRINT G;: HTAB 30: PRINT A
  53. 1090  HOME 
  54. 1100  INPUT "ENTER NEW MILEAGE (0=EXIT) -- ";M
  55. 1110  IF M = 0  THEN 1240
  56. 1120  INPUT "ENTER GALLONS OF GASOLINE  -- ";G
  57. 1130  IF G = 0  THEN A = 0: GOTO 1180
  58. 1140 A = (M -LM)/G
  59. 1150 TG = TG +G:TM = (M -LM) +TM
  60. 1160  IF (A <LA)  THEN LA = A
  61. 1170  IF (A >HA)  THEN HA = A
  62. 1180 TF = TF +1
  63. 1190  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R";(TF *2)
  64. 1200 DU =  USR(G):DU =  USR(M)
  65. 1210  PRINT D$
  66. 1220 LM = M
  67. 1230  GOTO 1070
  68. 1240  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R";(TF *2 +2)
  69. 1250 DU =  USR(TG):DU =  USR(TM):DU =  USR(LA):DU =  USR(HA):DU =  USR(EA)
  70. 1260  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R0"
  71. 1270 DU =  USR(TF)
  72. 1280  PRINT D$
  73. 1290  TEXT : GOTO 240
  74. 2000  HTAB 15: INVERSE : PRINT "DATA EDITING": NORMAL : PRINT 
  75. 2010  POKE 34,2
  76. 2020  IF TF = 0  THEN 4030
  77. 2030  PRINT "THERE HAVE BEEN ";TF;" FILL-UPS IN THIS"
  78. 2040  INPUT "CAR.  EDIT WHICH ONE? ";FF
  79. 2050  IF (FF <1)  OR (FF >TF)  THEN  INVERSE : PRINT "INVALID ENTRY NUMBER...": NORMAL : PRINT : GOTO 2030
  80. 2060  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R";(FF *2 -1)
  81. 2070 LM =  USR(DU):OG =  USR(DU):OM =  USR(DU):NG =  USR(DU):NM =  USR(DU)
  82. 2080  PRINT D$
  83. 2090  IF OG = 0  THEN A = 0: GOTO 2110
  84. 2100 A = (OM -LM)/OG
  85. 2110  HOME 
  86. 2120  HTAB 15: PRINT "OLD VALUES:"
  87. 2130  HTAB 18: PRINT "MILEAGE -- ";OM
  88. 2140  HTAB 18: PRINT "GALLONS -- ";OG
  89. 2150  HTAB 18: PRINT "AVERAGE -- ";A: PRINT 
  90. 2160  HTAB 18: PRINT "HIGH    -- ";HA
  91. 2170  HTAB 18: PRINT "LOW     -- ";LA: PRINT : PRINT 
  92. 2180  PRINT "NEW VALUES:"
  93. 2190  INPUT "   MILEAGE (0=EXIT) -- ";M
  94. 2200  IF M = 0  THEN  POKE 34,0: GOTO 240
  95. 2210  INPUT "   GALLONS          -- ";G
  96. 2220 TG = TG -OG +G:TM = TM +((M -OM) *((NG = 0)  OR (TF = FF))) +((OM -M) *((G = 0)  AND (NG < >0)))
  97. 2230  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R";(FF *2)
  98. 2240 DU =  USR(G):DU =  USR(M)
  99. 2250 OM = M:OG = G: IF (G = 0)  OR (NG = 0)  THEN  GOSUB 2500: GOTO 2270
  100. 2260  IF (A = HA)  OR (A = LA)  OR (((M -LM)/G) >HA)  OR (((M -LM)/G) <LA)  OR (((NM -M)/NG) >HA)  OR (((NM -M)/NG) <LA)  THEN  GOSUB 2500
  101. 2270  PRINT D$;"WRITE ";NM$;" MILEAGE.DATA,R";(TF *2 +2)
  102. 2280 DU =  USR(TG):DU =  USR(TM):DU =  USR(LA):DU =  USR(HA)
  103. 2290  PRINT D$
  104. 2300  GOTO 2090
  105. 2500 HA =  -1:LA = 5000
  106. 2510  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R1"
  107. 2520 L =  USR(DU)
  108. 2530  FOR I = 1 TO TF
  109. 2540 G =  USR(DU):M =  USR(DU)
  110. 2550  IF G = 0  THEN 2590
  111. 2560 A = (M -L)/G
  112. 2570  IF (A >HA)  THEN HA = A
  113. 2580  IF (A <LA)  THEN LA = A
  114. 2590 L = M
  115. 2600  NEXT I
  116. 2610  RETURN 
  117. 3000  HTAB 13: INVERSE : PRINT "LIFETIME AVERAGE": NORMAL : PRINT 
  118. 3010  IF TG = 0  THEN 4030
  119. 3020  PRINT "MILES   -- ";TM
  120. 3030  PRINT "GALLONS -- ";TG
  121. 3040 A = TM/TG
  122. 3050  PRINT "AVERAGE -- ";A
  123. 3060  PRINT : PRINT 
  124. 3070  HTAB 20: PRINT "HIGH -- ";HA
  125. 3080  HTAB 20: PRINT "LOW  -- ";LA
  126. 3090  PRINT : PRINT 
  127. 3100  GOSUB 3500
  128. 3110  PRINT : GOSUB 4500
  129. 3120  GOTO 240
  130. 3500 A = 1 +(A >(EA -4.5)) +(A >(EA -1.5)) +(A >(EA +1.5)) +(A >(EA +4.5)) +(A >(EA +7.5))
  131. 3510  ON A GOTO 3520,3540,3560,3580,3600,3620
  132. 3520  PRINT "FAIRLY POOR AVERAGE.  YOU BETTER TAKE": PRINT "A SECOND JOB TO HELP BUY GAS.": PRINT 
  133. 3530  RETURN 
  134. 3540  PRINT "NOT A VERY GOOD AVERAGE.  SOMETHING": PRINT "COULD BE WRONG -- MAYBE YOUR DRIVING!": PRINT 
  135. 3550  RETURN 
  136. 3560  PRINT "GOOD AVERAGE.  NOW DON'T SCREW IT UP": PRINT "BY MESSING AROUND.": PRINT 
  137. 3570  RETURN 
  138. 3580  PRINT "VERY GOOD AVERAGE.  SOMETHING IS SURE": PRINT "TO GO WRONG WITH YOUR CAR NOW.": PRINT 
  139. 3590  RETURN 
  140. 3600  PRINT "EXCELLANT AVERAGE.  BUT WHO ARE YOU": PRINT "TRYING TO FOOL -- ME OR YOURSELF?": PRINT 
  141. 3610  RETURN 
  142. 3620  PRINT "FANTASTIC AVERAGE!  YOU ARE EITHER": PRINT "CHEATING OR YOU LEARNED TO DRIVE BETTER.";: PRINT 
  143. 3630  RETURN 
  144. 4000  HTAB 12: INVERSE : PRINT "AVERAGE FOR LAST TEN": NORMAL : PRINT 
  145. 4010  POKE 34,2
  146. 4020  IF TF >9  THEN LF = TF:FF = LF -9: GOTO 5040
  147. 4030  FLASH : PRINT "SORRY";: NORMAL 
  148. 4040  PRINT ", THERE ARE NOT ENOUGH ENTRIES TO": PRINT "ALLOW THIS CALCULATION...": PRINT 
  149. 4050  GOSUB 4500: POKE 34,0: GOTO 240
  150. 4500  PRINT "HIT ANY KEY TO CONTINUE -- ";: GET A$: PRINT : PRINT 
  151. 4510  RETURN 
  152. 5000  HTAB 8: INVERSE : PRINT "NUMERICAL MILEAGE ANALYSIS": NORMAL : PRINT 
  153. 5010  POKE 34,2
  154. 5020  IF TF = 0  THEN 4030
  155. 5030  GOSUB 6500
  156. 5040 ST = FF
  157. 5050 RM = 0:RG = 0
  158. 5060  IF (LF -FF) <10  THEN EN = LF: GOTO 5080
  159. 5070 EN = FF +9
  160. 5080  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R";(FF *2 -1)
  161. 5090 LM =  USR(DU)
  162. 5100  FOR I = FF TO EN
  163. 5110 G =  USR(DU):M =  USR(DU)
  164. 5120  IF G = 0  THEN A = 0: GOTO 5150
  165. 5130 A = (M -LM)/G
  166. 5140 RM = RM +(M -LM):RG = RG +G
  167. 5150  PRINT "MILEAGE FOR FILL-UP #";I;":";: HTAB 30: PRINT A: PRINT 
  168. 5160 LM = M
  169. 5170  NEXT I
  170. 5180  PRINT D$
  171. 5190  GOSUB 4500
  172. 5200 FF = EN +1
  173. 5210  IF (FF -1) <LF  THEN 5060
  174. 5220 A = RM/RG
  175. 5230  PRINT "AVERAGE FOR #";ST;" - ";LF;: HTAB 30: PRINT A: PRINT 
  176. 5240  GOSUB 5500: GOSUB 3500: GOSUB 4500
  177. 5250  POKE 34,0
  178. 5260  GOTO 240
  179. 5500 DF = (TM/TG) -A
  180. 5510  IF DF >0  THEN C$ = " LESS"
  181. 5520  IF DF < = 0  THEN C$ = " GREATER"
  182. 5530 DF =  ABS(DF)
  183. 5540  PRINT "THIS AVERAGE IS ";DF;C$
  184. 5550  PRINT "THAN THE CAR'S LIFETIME AVERAGE."
  185. 5560  PRINT 
  186. 5570  RETURN 
  187. 6000  HTAB 8: INVERSE : PRINT "GRAPHICAL MILEAGE ANALYSIS": NORMAL : PRINT 
  188. 6010  POKE 34,2
  189. 6020  IF TF = 0  THEN 4030
  190. 6030  GOSUB 6500
  191. 6040  IF FF = LF  THEN 6030
  192. 6050  IF (LF -FF) >139  THEN  INVERSE : PRINT "RANGE IS TOO BIG...": NORMAL : GOTO 6030
  193. 6060  HOME 
  194. 6070  HGR : HCOLOR= 3
  195. 6080  HPLOT 0,0 TO 0,159 TO 279,159
  196. 6090  FOR I = 1 TO 10
  197. 6100  HPLOT 0,(160 -(I *16)) TO 3,(160 -(I *16))
  198. 6110  NEXT I
  199. 6120 DF = LF -FF:IN =  INT(279/DF):EN = IN *DF
  200. 6130  FOR I = 0 TO EN  STEP IN
  201. 6140  HPLOT I,155 TO I,159
  202. 6150  NEXT I
  203. 6160  PRINT D$;"READ ";NM$;" MILEAGE.DATA,R";(FF *2 -1)
  204. 6170 LM =  USR(DU)
  205. 6180  FOR I = 0 TO EN  STEP IN
  206. 6190 G =  USR(DU):M =  USR(DU)
  207. 6200  IF G = 0  THEN PL = LP: GOTO 6220
  208. 6210 A = (M -LM)/G
  209. 6220 PL =  INT(((HA -A)/(HA -LA)) *159)
  210. 6230  IF I = 0  THEN 6250
  211. 6240  HPLOT (I -IN),LP TO I,PL
  212. 6250 LP = PL:LM = M
  213. 6260  NEXT I
  214. 6270  PRINT D$
  215. 6280  VTAB 21: PRINT "Y-AXIS:  MAX. OF": HTAB 9: PRINT HA: HTAB 10: PRINT "MIN. OF": HTAB 9: PRINT LA;
  216. 6290  VTAB 21: HTAB 27: PRINT "X-AXIS:": HTAB 27: PRINT FF;" TO ";LF
  217. 6300  VTAB 24: HTAB 21: INVERSE : PRINT "ANY KEY FOR AVERAGE";: GET SN$
  218. 6310 PL =  INT(((HA -(TM/TG))/(HA -LA)) *159): HPLOT 0,PL TO EN,PL
  219. 6320  VTAB 24: HTAB 21: PRINT "ANY KEY FOR MENU...";: GET SN$: NORMAL 
  220. 6330  TEXT : GOTO 240
  221. 6500  PRINT "THERE HAVE BEEN ";TF;" FILL-UPS IN THIS"
  222. 6510  PRINT "CAR.  ANALIZE WHICH ONES?  (FIRST,LAST)"
  223. 6520  INPUT "RANGE? ";FF,LF
  224. 6530 LF =  INT(LF):FF =  INT(FF)
  225. 6540  IF (FF <1)  OR (LF >TF)  OR (FF >LF)  THEN  INVERSE : PRINT "BAD RANGE...": NORMAL : GOTO 6520
  226. 6550  RETURN 
  227. 7000  PRINT D$;"CLOSE ";NM$;" MILEAGE.DATA"
  228. 7010  VTAB 12: HTAB 19: PRINT "END": PRINT  CHR$(4)"RUNMENU"
  229. 7020  VTAB 22: PRINT : PRINT  CHR$(4)"RUNMENU"